local validate = require("lapis.validate")


-- Valida si el campo de un formulario contiene espacios en blanco.
validate.validate_functions.not_spaces = function(input)
	local str = tostring(input)	
	return string.match(str,"%s") == nil, "%s contiene espacios."
end


-- Valida si el formato de una dirección de correo electrónico es correcto,
-- basado en la expresión regular de la WHATWG:
-- https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address
validate.validate_functions.is_email = function(input)	
	local email       = tostring(input)
	local regex_email = require("utils.website_config").regex_email

	local email_rule = string.match(email, regex_email)

	if email == email_rule then
		return true
	else
		return false, "E-mail invalido."
	end
end


-- Valida que el apodo de un usuario no sea un correo electrónico,
-- evita que los usuarios se registren con direcciones de
-- correo electrónico de otras personas.
validate.validate_functions.is_username = function(input)
	local username    = tostring(input)
	local regex_email = require("utils.website_config").regex_email

	local username_rule = string.match(username, regex_email)

	if username == username_rule then
		return false, "Apodo invalido."
	else
		return true
	end
end


-- Valida el formato y el tamaño de una imagen.
validate.validate_functions.is_image = function(input)
	local max_image_size  = require("utils.website_config").max_image_size
	local image_formats   = require("utils.website_config").image_formats

	if #input.content > max_image_size then
		return false, "Invalido, elige una imagen menor a "..max_image_size.." bytes."
	else
		local is_image = false

		for index, format in ipairs(image_formats) do
			if input["content-type"] == "image/"..format then
				is_image = true
				break
			end
		end

		if is_image then
			return is_image
		else
			return is_image, "Formato de imagen invalido."
		end
	end
end


return validate